//封装 axios 的获取
/*
1.封装了 baseUrl 根路径 网址
2.封装了 获取数据的过期时间
3.封装了 请求拦截和响应拦截
4.封装了数据获取到之前旋转小图标
5.数据如果每个获取到报错信息
*/
//引入 store
import store from "@/store";
//引入报错的全局方法
import { Message, Loading } from "element-ui";
//获取 环境配置项中的api的基础路径
console.log(process.env.VUE_APP_API_URL);
//1. 引入axios
import axios from "axios";
import Vue from "vue";
const service = axios.create({
  baseURL: process.env.VUE_APP_API_URL, //"http://localhost:3007",
  timeout: 3000,
});
//创建 保存 旋转小图标的变量
var loadObj = null;
//请求拦截
service.interceptors.request.use(
  (config) => {
    console.log(config);
    if (!loadObj) {
      loadObj = Loading.service({
        lock: true,
        target: "#loading",
        text: "加载中...",
        spinner: "el-icon-loading",
        background: "rgba(0,0,0,0.5)",
      });
    }
    //假设有token，需要设置 token 令牌
    config.headers["user-token"] = store.getters.token;
    return config;
  },
  (error) => {
    Vue.nextTick(() => {
      //以服务的方式调用 Loading需要异步关闭
      loadObj.close();
    });
    //表示 错误返回
    return Promise.reject(error);
  }
);

//响应拦截
service.interceptors.response.use((response) => {
  //对响应数据做点什么
  console.log(35, response);
  Vue.nextTick(() => {
    //以服务的方式调用 Loading需要异步关闭
    loadObj.close();
  });
  if (response.data.code == 666) {
    return response;
  } else {
    Vue.nextTick(() => {
      //以服务的方式调用 Loading需要异步关闭
      loadObj.close();
    });
    Message({
      message: response.data.msg,
      type: "error",
    });
    return Promise.reject(response.data.msg);
  }
}),
  (error) => {
    Vue.nextTick(() => {
      //以服务的方式调用 Loading需要异步关闭
      loadObj.close();
    });
    Message({
      message: error,
      type: "error",
    });
    return Promise.reject(error);
  };

//输出
export default service;
